package utils;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipException;
import java.util.zip.ZipFile;

public class ZipUtil {

    /**
     * 解压文件
     * */
    public static void testZipToUnzip(ZipFile zipfile, File outfile) {
        //将一个压缩文件zipfile(可以包含文件)解压到file文件中
        ZipEntry ze = null;
        InputStream zis = null;
        FileOutputStream fos = null;
        Enumeration e = zipfile.entries();
        while (e.hasMoreElements()) {
            ze = (ZipEntry) e.nextElement();
            //这句话的作用：如果ze不是一个目录则执行下面的语句，也就是创建输出文件并且将输入流输出到输出流中。
            //上面的if语句作用和该语句作用一样
            if (!ze.isDirectory()) {
                try {
                    zis = zipfile.getInputStream(ze);
                    if (!outfile.exists())
                        //如果输出文件不存在,那么创建输出文件的父目录
                        outfile.getParentFile().mkdirs();
                    fos = new FileOutputStream(outfile);
                    byte[] b = new byte[1024];
                    int len;
                    while ((len = zis.read(b)) > 0) {
                        fos.write(b, 0, len);
                    }
                    fos.close();
                    zis.close();
                } catch (ZipException e1) {
                    e1.printStackTrace();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
        }
    }
}
